from flask import Flask
from settings import dict_config
from flask_migrate import Migrate
'''
创建APP的函数,参数是代表运行的类型：1、开发环境，2、生产环境
'''
def create_app(run_type):


    app = Flask(__name__)
    # 加载整改项目的配置
    app.config.from_object(dict_config.get(run_type))

    #  初始化SQLAlchemy
    from comment.modules import db
    db.init_app(app)

    # 初始化限制器
    from comment.utils.limiter import limiter as lmt
    lmt.init_app(app)

    #  初始化Redis的数据库连接
    from comment.utils.financial_redis import redis_client
    redis_client.init_app(app)

    # 初始化日志处理的工具
    from comment.utils.Financial_Logging import create_logger
    create_logger(app)


    # 初始化Migrate ,可以执行命令： flask db init， flask db migrate，flask db upgrade
    # 执行以上的三个命令，需要默认的Flask项目入口文件。当前项目没有默认的项目入口文件。需要设置环境变量：
    Migrate(app,db)

    #注册token认证请求钩子
    from comment.utils.request_auth import jwt_request_auth
    app.before_request(jwt_request_auth)  #注册请求钩子函数


    #注册蓝图
    from financial.resource.user import user_bp
    app.register_blueprint(user_bp)

    # 注册蓝图
    from financial.resource.product import product_bp
    app.register_blueprint(product_bp)

    # 注册蓝图
    from financial.resource.card import card_bp
    app.register_blueprint(card_bp)


    #注册消息类的蓝图
    from financial.resource.letter import letter_bp
    app.register_blueprint(letter_bp)

    # 注册消息类的蓝图
    from financial.resource.account import account_bp
    app.register_blueprint(account_bp)

    # 注册消息类的蓝图
    from financial.resource.transaction import transaction_bp
    app.register_blueprint(transaction_bp)



    return app